#include <stdio.h>
#include <string.h>

// 判断s2中的字符是否都在s1中
int StringContain(char s1[], char s2[]){
	// 使用位运算法，一个int变量在64位平台有32位，其中的26位可以用来标识
	// 26个大写字母，如果该大写字母在s1中，就将该位设置为1
	// 空间复杂度为O(1), 时间复杂度为O(n + m)
	int hash = 0;
	int i;
	for(i = 0; i < strlen(s1); i++){
		hash |= (1 << (s1[i] - 'A'));
	}
	printf("hash: %d\n", hash);
	for(i = 0; i < strlen(s2); i++){
		if((hash & (1 << (s2[i] - 'A'))) == 0){
			return 0;
		}
	}
	return 1;
}

int main(){
	char s1[] = "ABCD";
	char s2[] = "AA";
	printf("string '%s' contains '%s': %d\n", s1, s2, StringContain(s1, s2));
}
